昨天太晚睡,早上十點才真正起床XD,好廢...
其實是想吃烤肉又懶得烤,所以半夜兩點跑出去買,然後早上六點吃了烤肉又繼續睡,果然是真廢...
想要奮發,不過筆電沒電了,出門前先充個電吧...充完電前先寫一段文...好想喝咖啡阿,只是下午還得拜拜,所以出門喝咖啡也不能太久,不管他了。
一直有事出不了門阿~~在家裡試了一下jest跟mocha。
大概是為了能處理jsx?jest是自己去剖析測試程式碼,所以當他不支援ES6+時,就需要做前置處理(例如Babel)。
我自己是都在用mocha,mocha是透過node或瀏覽器環境來跑測試程式,所以只要環境支援ES6+,就不是問題。
寫了一些ES6 Module,node.js在第14版應該就可以不加option就支援ES6 Module,所以裝了試試看。
node.js環境為了能支援common.js module及ES6 module,訂了幾個規則:
{"type":"module"}
的話,預設就是ES6 module不過目前還是在青黃不接,一些node.js模組還只支援CommonJS module,雖然node.js允許用ES import語法來載入CommonJS模組,但是有點跛腳...或是我搞錯什麼XD
從jest start guide偷來sum.js
:
export default sum;
function sum(a, b) {
return a + b;
}
然後寫測試test/sum.js
:
import sum from "../sum.js";
import { assert } from "chai";
it('adds 1 + 2 to equal 3', () => {
assert(sum(1,2)===3, 'not equal');
});
馬上報錯:
import { assert } from "chai";
^^^^^^
SyntaxError: Named export 'assert' not found. The requested module 'chai' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:
import pkg from 'chai';
const {assert} = pkg;
at ModuleJob._instantiate (internal/modules/esm/module_job.js:98:21)
at async ModuleJob.run (internal/modules/esm/module_job.js:143:5)
at async Loader.import (internal/modules/esm/loader.js:165:24)
at async Object.exports.loadFilesAsync (H:\builds\jests\node_modules\mocha\lib\esm-utils.js:33:20)
at async singleRun (H:\builds\jests\node_modules\mocha\lib\cli\run-helpers.js:156:3)
at async Object.exports.handler (H:\builds\jests\node_modules\mocha\lib\cli\run.js:366:5)
npm ERR! Test failed. See above for more details.
怪...試了一下各種可能性,比較好的解法:
import sum from "../sum.js";
import defaultExport from "chai";
const { assert } = defaultExport;
it('adds 1 + 2 to equal 3', () => {
assert(sum(1,2)===3, 'not equal');
});
問題是如果多個模組要import,要重複使用defualtExport好像也怪怪的,另一個做法:
import sum from "../sum.js";
import * as _chai from "chai";
const { assert } = _chai['default'];
it('adds 1 + 2 to equal 3', () => {
assert(sum(1,2)===3, 'not equal');
});
這是用console.log(_chai)
看了一下載入的東西發現的,default
是Javascript關鍵字,用起來很麻煩說,也許node.js可以調整一下名稱XD
回頭看了一下chai的github,master目前已經加上ES6 Module的支援,但是...最新發行的版本還沒有...好吧
今天中秋節,用功就到這裡為止,出門溜達去~~